home *** CD-ROM | disk | FTP | other *** search
- LISTING ONE
-
- ' ╔═══════════════════════════════════════════════════╗
- ' ║ ║
- ' ║ Program to accompany the Article "Multitasking ║
- ' ║ using QuickBASIC" which appeared in TECH ║
- ' ║ Specialist magazine, by George R. Toft. ║
- ' ║ ║
- ' ║ ║
- ' ║ Language Used: QuickBASIC 4.5 or QuickBASIC 4.0 ║
- ' ║ ║
- ' ║ Date Created: July 1st, 1990 ║
- ' ║ ║
- ' ║ Author: George R. Toft ║
- ' ║ ║
- ' ╚═══════════════════════════════════════════════════╝
-
-
-
- ' ╔═══════════════════════════════════════════════════╗
- ' ║ Foreground task algorithm: ║
- ' ║ ║
- ' ║ Define Common variables ║
- ' ║ Allocate memory for array ║
- ' ║ ║
- ' ║ Initialize all variables ║
- ' ║ ║
- ' ║ Repeat ║
- ' ║ Make a random number ║
- ' ║ Using the number as an index, increment the ║
- ' ║ indexed array element ║
- ' ║ Until Quit ║
- ' ║ ║
- ' ║ ║
- ' ╚═══════════════════════════════════════════════════╝
-
-
-
- '--- Constants
- CONST FALSE = 0, TRUE = NOT FALSE
- CONST MaxInt = 32767
-
- CONST ArrayLow = 0, ArrayHigh = 9
-
- CONST BarChar$ = "▄"' character code 220
-
-
-
- '--- The default data type will be integers
- DEFINT A-Z
- '$DYNAMIC
-
-
-
- '--- Procedures and Function declarations
- DECLARE SUB BackgroundTask ()
- DECLARE SUB CreateScreen ()
- DECLARE SUB Inc (Argument AS INTEGER)
- DECLARE SUB SInc (Argument AS SINGLE)
-
- DECLARE FUNCTION RandomNumber ()
-
-
-
-
- COMMON SHARED Array() AS INTEGER
- COMMON SHARED Quit
- COMMON SHARED ScreenConst
-
-
- ' This is the array that keeps track of the data
- DIM Array(ArrayLow TO ArrayHigh) AS INTEGER
-
-
-
-
- '============== Initialization =================
-
- CreateScreen
-
- Quit = FALSE
- ScreenConst = 5
-
- ' Even though this step is not necessary in
- ' BASIC, it is a good idea to maintain
- ' positive control over the computer's memory
- FOR i = ArrayLow TO ArrayHigh
- Array(i) = 0
- NEXT i
-
-
-
-
- '============== Activate multitasking ==========
-
- ON TIMER(1) GOSUB TimerInterrupt
- TIMER ON
-
-
- LoopCounter! = 0
- DO
-
- Inc Array(RandomNumber)
-
- SInc LoopCounter!
- LOCATE 4, 31
- PRINT USING "##,###"; LoopCounter!
-
- LOOP UNTIL Quit
-
-
- '--- Shutdown background task
- TIMER OFF
-
-
- '--- terminate program
- LOCATE 24, 1
-
- END' ForegroundTask
-
-
-
-
- '=====================================================
-
- TimerInterrupt: ' Begins
-
- BackgroundTask
- RETURN
-
- REM $STATIC
- '$Page
- '
- '
- SUB CreateScreen
- ' creates the screen for both tasks
-
-
- CLS
- PRINT TAB(15); "A Demonstration in Multitasking";
- PRINT "Using QuickBASIC"
- PRINT TAB(30); "by George R. Toft"
- PRINT
- PRINT "Number of times through loop:"
- PRINT
- PRINT "Screen scale:";
- PRINT TAB(21); "Enter a new screen scale here:"
- PRINT TAB(21); "(Type 'Quit' to stop program)"
- FOR i = ArrayLow TO ArrayHigh
- LOCATE 10 + i, 1
- PRINT USING "##:"; i
- NEXT i
-
-
- END SUB' CreateScreen
-
- '$Page
- '
- '
- SUB Inc (Argument AS INTEGER)
- ' Increments the Integer type argument
-
- Argument = Argument + 1
-
- END SUB' Inc
-
- '$Page
- '
- '
- FUNCTION RandomNumber
- ' Generates a random number between the two limits
-
- RandomNumber = INT((ArrayHigh - ArrayLow + 1) * RND(1))
-
- END FUNCTION' RandomNumber
-
- '$Page
- '
- '
- SUB SInc (Argument AS SINGLE)
- ' Increments the Single type argument
-
- Argument = Argument + 1
-
- END SUB' SInc
-